package sfin.swt.mock;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

import br.com.statizo.financeiro.domain.entity.impl.Banco;
import br.com.statizo.financeiro.domain.entity.impl.CartaoCredito;
import br.com.statizo.financeiro.domain.entity.impl.Categoria;
import br.com.statizo.financeiro.domain.entity.impl.ContaCorrente;
import br.com.statizo.financeiro.domain.entity.impl.Lancamento;
import br.com.statizo.financeiro.domain.enums.FormaPagamento;
import br.com.statizo.financeiro.domain.enums.GrupoLancamento;

public class MockLancamento {

	Banco[] bancos = new Banco[5];
	ContaCorrente[] contas = new ContaCorrente[5];
	CartaoCredito[] cartoes = new CartaoCredito[6];
	Categoria[] categorias = new Categoria[10];

	List<Lancamento> lancamentos = new ArrayList<>();
	

	private static MockLancamento mock;
	
	public static MockLancamento getInstance(){
		if(mock == null)
			mock = new MockLancamento();
		return mock;
	}
	
	
	private MockLancamento() {

		criarBancos();
		criarContas();
		criarCartoes();
		criarCartoes();
		criarCategorias();
		criarLancamentos();
	}

	private void criarLancamentos() {

		Lancamento lancamento = new Lancamento();
		//lancamento.setId(1L);
		lancamento.setDataDivida(Calendar.getInstance());
		lancamento.setDataPagamento(Calendar.getInstance());
		lancamento.setConta(contas[0]);
		lancamento.setDescricao("Salário");
		lancamento.setValor(10000);
		lancamento.setCategoria(categorias[0]);
		lancamento.setObservacao("Referente a este mês");
		lancamento.setFormaPagamento(FormaPagamento.CREDITO_CONTA);
		lancamento.setPago(true);
		lancamentos.add(lancamento);
		
		lancamento = new Lancamento();
		//lancamento.setId(2L);
		lancamento.setDataDivida(Calendar.getInstance());
		lancamento.setDataPagamento(Calendar.getInstance());
		lancamento.setConta(contas[0]);
		lancamento.setDescricao("Prestação do Apto.");
		lancamento.setValor(667);
		lancamento.setCategoria(categorias[1]);
		lancamento.setObservacao("8 de 300");
		lancamento.setFormaPagamento(FormaPagamento.BOLETO);
		lancamentos.add(lancamento);
		
		lancamento = new Lancamento();
		//lancamento.setId(3L);
		lancamento.setDataDivida(Calendar.getInstance());
		lancamento.setDataPagamento(Calendar.getInstance());
		lancamento.setConta(contas[4]);
		lancamento.setDescricao("UNO");
		lancamento.setValor(280);
		lancamento.setCategoria(categorias[2]);
		lancamento.setObservacao("Verificar o Seguro");
		lancamento.setFormaPagamento(FormaPagamento.DEBITO_AUTO);
		lancamentos.add(lancamento);

		lancamento = new Lancamento();
		//lancamento.setId(3L);
		lancamento.setDataDivida(Calendar.getInstance());
		lancamento.setDataPagamento(Calendar.getInstance());
		lancamento.setConta(contas[0]);
		lancamento.setDescricao("CEB");
		lancamento.setValor(50);
		lancamento.setCategoria(categorias[3]);
		lancamento.setObservacao("");
		lancamento.setFormaPagamento(FormaPagamento.FATURA);
		lancamentos.add(lancamento);

		lancamento = new Lancamento();
		//lancamento.setId(4L);
		lancamento.setDataDivida(Calendar.getInstance());
		lancamento.setDataPagamento(Calendar.getInstance());
		lancamento.setConta(contas[0]);
		lancamento.setDescricao("UNO");
		lancamento.setValor(139);
		lancamento.setCartao(cartoes[0]);
		lancamento.setCategoria(categorias[4]);
		lancamento.setObservacao("Abastecer só em Santa Maria (Mais barato)");
		lancamento.setFormaPagamento(FormaPagamento.CARTAO_CREDITO);
		lancamentos.add(lancamento);

		lancamento = new Lancamento();
		//lancamento.setId(5L);
		lancamento.setDataDivida(Calendar.getInstance());
		lancamento.setDataPagamento(Calendar.getInstance());
		lancamento.setConta(contas[0]);
		lancamento.setDescricao("Roupas Bruno");
		lancamento.setValor(300);
		lancamento.setCategoria(categorias[5]);
		lancamento.setObservacao("Na feira dos goianos");
		lancamento.setFormaPagamento(FormaPagamento.DINHEIRO);
		lancamentos.add(lancamento);

		lancamento = new Lancamento();
		//lancamento.setId(6L);
		lancamento.setDataDivida(Calendar.getInstance());
		lancamento.setDataPagamento(Calendar.getInstance());
		lancamento.setConta(contas[0]);
		lancamento.setDescricao("Registro do Planilha de Gastos");
		lancamento.setValor(30);
		lancamento.setCategoria(categorias[6]);
		lancamento.setObservacao("Registrar Ano que vem");
		lancamento.setFormaPagamento(FormaPagamento.CARTAO_DEBITO);
		lancamentos.add(lancamento);
		
		lancamento = new Lancamento();
		//lancamento.setId(7L);
		lancamento.setDataDivida(Calendar.getInstance());
		lancamento.setDataPagamento(Calendar.getInstance());
		lancamento.setConta(contas[0]);
		lancamento.setDescricao("Remédio pra Gripe");
		lancamento.setValor(30);
		lancamento.setCategoria(categorias[7]);
		lancamento.setObservacao("");
		lancamento.setFormaPagamento(FormaPagamento.CARTAO_CREDITO);
		lancamentos.add(lancamento);

		lancamento = new Lancamento();
		//lancamento.setId(8L);
		lancamento.setDataDivida(Calendar.getInstance());
		lancamento.setDataPagamento(Calendar.getInstance());
		lancamento.setConta(contas[0]);
		lancamento.setDescricao("Multa do Plano");
		lancamento.setValor(280);
		lancamento.setCategoria(categorias[8]);
		lancamento.setObservacao("Tomar cuidado na L2");
		lancamento.setFormaPagamento(FormaPagamento.BOLETO);
		lancamentos.add(lancamento);

		lancamento = new Lancamento();
		//lancamento.setId(9L);
		lancamento.setDataDivida(Calendar.getInstance());
		lancamento.setDataPagamento(Calendar.getInstance());
		lancamento.setConta(contas[0]);
		lancamento.setDescricao("Batida do Carro");
		lancamento.setValor(500);
		lancamento.setCategoria(categorias[8]);
		lancamento.setObservacao("Não bater mais");
		lancamento.setFormaPagamento(FormaPagamento.CARTAO_CREDITO);
		lancamentos.add(lancamento);
		
		lancamento = new Lancamento();
		//lancamento.setId(33L);
		lancamento.setDataDivida(Calendar.getInstance());
		lancamento.setDataPagamento(new GregorianCalendar(2015,0,10));
		lancamento.setConta(contas[1]);
		lancamento.setDescricao("Conta Nova");
		lancamento.setValor(500);
		lancamento.setCategoria(categorias[5]);
		lancamento.setObservacao("Sei lá");
		lancamento.setFormaPagamento(FormaPagamento.CARTAO_CREDITO);
		lancamentos.add(lancamento);
		
		
	}

	private void criarCategorias() {

		
		Categoria categoria = new Categoria();
		//categoria.setId(1L);
		categoria.setGrupo(GrupoLancamento.RECEITA);
		categoria.setNome("Salário");
		categorias[0] = categoria;
		
		categoria = new Categoria();
		//categoria.setId(2L);
		categoria.setGrupo(GrupoLancamento.DESPESA_FIXA);
		categoria.setNome("Prestações");
		categorias[1] = categoria;

		categoria = new Categoria();
		//categoria.setId(3L);
		categoria.setGrupo(GrupoLancamento.DESPESA_FIXA);
		categoria.setNome("Seguro");
		categorias[2] = categoria;

		categoria = new Categoria();
		//categoria.setId(4L);
		categoria.setGrupo(GrupoLancamento.DESPESA_VARIAVEL);
		categoria.setNome("Conta de Energia");
		categorias[3] = categoria;

		categoria = new Categoria();
		//categoria.setId(5L);
		categoria.setGrupo(GrupoLancamento.DESPESA_VARIAVEL);
		categoria.setNome("Combustível");
		categorias[4] = categoria;

		categoria = new Categoria();
		//categoria.setId(6L);
		categoria.setGrupo(GrupoLancamento.DESPESA_ADICIONAL);
		categoria.setNome("Vestuário");
		categorias[5] = categoria;

		categoria = new Categoria();
		//categoria.setId(7L);
		categoria.setGrupo(GrupoLancamento.DESPESA_ADICIONAL);
		categoria.setNome("Registro de Domínio");
		categorias[6] = categoria;

		categoria = new Categoria();
		//categoria.setId(8L);
		categoria.setGrupo(GrupoLancamento.DESPESA_EXTRA);
		categoria.setNome("Remédios");
		categorias[7] = categoria;

		categoria = new Categoria();
		//categoria.setId(9L);
		categoria.setGrupo(GrupoLancamento.DESPESA_EXTRA);
		categoria.setNome("Multas de Trânsito");
		categorias[8] = categoria;

		categoria = new Categoria();
		//categoria.setId(10L);
		categoria.setGrupo(GrupoLancamento.DESPESA_EXTRA);
		categoria.setNome("Manutenção no Carro");
		categorias[9] = categoria;
		
	}

	private void criarBancos() {
		
		Banco banco = new Banco();
		banco.setCodigo("001");
		banco.setNome("Banco do Brasil");
		bancos[0] = banco;
		
		banco = new Banco();
		banco.setCodigo("104");
		banco.setNome("Caixa Econômica Federal");
		bancos[1] = banco;

		banco = new Banco();
		banco.setCodigo("070");
		banco.setNome("Banco de Brasília (BRB)");
		bancos[2] = banco;

		banco = new Banco();
		banco.setCodigo("341");
		banco.setNome("Itaú Unibanco");
		bancos[3] = banco;		

		banco = new Banco();
		banco.setCodigo("237");
		banco.setNome("Banco Bradesco");
		bancos[4] = banco;		

	}

	private void criarContas() {
		
		ContaCorrente conta = new ContaCorrente();
		conta.setBanco(bancos[0]);
		conta.setAgencia("001");
		conta.setNumero("545464");
		conta.setApelido("Bruno BB");
		contas[0] = conta;
		
		conta = new ContaCorrente();
		conta.setBanco(bancos[1]);
		conta.setAgencia("545");
		conta.setNumero("9498");
		conta.setApelido("Priscilla Caixa");
		contas[1] = conta;
		
		conta = new ContaCorrente();
		conta.setBanco(bancos[2]);
		conta.setAgencia("2938");
		conta.setNumero("939393");
		conta.setApelido("Mãe BRB");
		contas[2] = conta;

		conta = new ContaCorrente();
		conta.setBanco(bancos[3]);
		conta.setAgencia("233");
		conta.setNumero("555");
		conta.setApelido("Itaú Priscilla");
		contas[3] = conta;

		conta = new ContaCorrente();
		conta.setBanco(bancos[4]);
		conta.setAgencia("5sx");
		conta.setNumero("345555");
		conta.setApelido("Bruno Bradesco");
		contas[4] = conta;
		
	}

	private void criarCartoes() {

		CartaoCredito cartao = new CartaoCredito();
		cartao.setConta(contas[0]);
		cartao.setNome("Bruno Visa");
		cartoes[0] = cartao;

		cartao = new CartaoCredito();
		cartao.setConta(contas[0]);
		cartao.setNome("Bruno Master");
		cartoes[1] = cartao;

		cartao = new CartaoCredito();
		cartao.setConta(contas[1]);
		cartao.setNome("Cartão Caixa Priscilla");
		cartoes[2] = cartao;

		cartao = new CartaoCredito();
		cartao.setConta(contas[2]);
		cartao.setNome("Cartão Mãe BRB");
		cartoes[3] = cartao;

		cartao = new CartaoCredito();
		cartao.setConta(contas[3]);
		cartao.setNome("ItaúCard Master Priscilla");
		cartoes[4] = cartao;

		cartao = new CartaoCredito();
		cartao.setConta(contas[4]);
		cartao.setNome("Cartão BRA Bruno");
		cartoes[5] = cartao;

	}
	
	
	public List<Lancamento> getLancamentos() {
		return lancamentos;
	}
	
	public CartaoCredito[] getCartoes() {
		return cartoes;
	}
	
	public Categoria[] getCategorias() {
		return categorias;
	}
	
	public Banco[] getBancos() {
		return bancos;
	}
	
	public ContaCorrente[] getContas() {
		return contas;
	}
	
}